﻿

#include "zyLinkBox.h"


BlackMoonUI::zyLinkBox::zyLinkBox()
{
	SetMember(L"this", (LONG_PTR)this);
	m_obj->setChildWndProc(zyLinkBox_ChildWndProc);
	setType(zyType_Link);
}
BlackMoonUI::zyLinkBox::~zyLinkBox()
{

}
LRESULT WINAPI BlackMoonUI::zyLinkBox::zyLinkBox_ChildWndProc(zyObject* obj, HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam, BOOL* bHandle)
{
	if (message == WM_NOTIFY) {
		NMHDR* nm = (NMHDR*)lParam;
		if (nm->code == NM_CLICK) {
			TRegEvent* evtPtr = (TRegEvent*)obj->getRegEvent(L"OnClick");
			NMLINK* nmlk(reinterpret_cast<NMLINK*>(lParam));//reinterpret_cast 转指针 static_cast 转变量
			//std::wcout << "OnClick: " << nm->hwndFrom << " " << nmlk->item.iLink << " " << nmlk->item.szUrl << " " << nmlk->item.szID << std::endl;
			if (evtPtr != nullptr) {
				// 将 WCHAR 数组转换为 std::wstring
				std::wstring url(nmlk->item.szUrl);
				std::wstring id(nmlk->item.szID);
				evtPtr->handler<int>(nm->hwndFrom, nmlk->item.iLink, url, id);
			}
		}
	}
	return zyCommandCtrol::zyCommand_ChildWndProc(obj, hWnd, message, wParam, lParam, bHandle);
}
BOOL BlackMoonUI::zyLinkBox::创建(HWND 参数_父窗口, const std::wstring& 参数_标题, POINT 参数_位置, POINT 参数_尺寸, int 参数_ID, int 参数_窗口风格, int 参数_扩展风格)
{
	if (参数_窗口风格 == 0)
		参数_窗口风格 = LWS_TRANSPARENT | WS_TABSTOP;
	if (参数_ID == NULL)
		参数_ID = 黑月默认ID();

	return _CreateCtrol(参数_父窗口, 参数_标题, 参数_位置, 参数_尺寸, 参数_ID, 参数_窗口风格, 参数_扩展风格, L"SysLink");
}

BOOL BlackMoonUI::zyLinkBox::创建(zyWindow& 参数_父窗口, const std::wstring& 参数_标题, POINT 参数_位置, POINT 参数_尺寸, int 参数_ID, int 参数_窗口风格, int 参数_扩展风格)
{
	if (参数_窗口风格 == 0)
		参数_窗口风格 = LWS_TRANSPARENT | WS_TABSTOP;
	if (参数_ID == NULL)
		参数_ID = 黑月默认ID();

	return _CreateCtrol(参数_父窗口.getHwnd(), 参数_标题, 参数_位置, 参数_尺寸, 参数_ID, 参数_窗口风格, 参数_扩展风格, L"SysLink");
}
// 设置链接URL的函数  
bool BlackMoonUI::zyLinkBox::置链接URL(int linkIndex, const std::wstring& url) {
	LITEM li = { 0 };
	li.mask = LIF_URL | LIF_ITEMINDEX;
	li.iLink = linkIndex;
	// 检查长度，限制为2048个字符  
	size_t len = url.size();
	if (len > 2048) {
		len = 2048;
	}
	memcpy(li.szUrl, url.c_str(), len);
	return sendMsg(LM_SETITEM, 0, reinterpret_cast<LPARAM>(&li)) != 0;
}
std::wstring BlackMoonUI::zyLinkBox::取链接URL(int 参数_链接索引) {
	LITEM li = { 0 };
	li.mask = LIF_URL | LIF_ITEMINDEX;
	li.iLink = 参数_链接索引;
	if (sendMsg(LM_GETITEM, 0, (LPARAM)&li) != 0) {
		return li.szUrl;
	}
	return L"";
}
bool BlackMoonUI::zyLinkBox::置链接ID(int 参数_链接索引, const std::wstring& 参数_ID) {
	LITEM li = { 0 };
	li.mask = LIF_ITEMID | LIF_ITEMINDEX;
	li.iLink = 参数_链接索引;
	// 检查长度，限制为2048个字符  
	size_t len = 参数_ID.size();
	if (len > 48) {
		len = 48;
	}
	memcpy(li.szID, 参数_ID.c_str(), len);
	return sendMsg(LM_SETITEM, 0, reinterpret_cast<LPARAM>(&li)) != 0;
}
std::wstring BlackMoonUI::zyLinkBox::取链接ID(int 参数_链接索引) {
	LITEM li = { 0 };
	li.mask = LIF_ITEMID | LIF_ITEMINDEX;
	li.iLink = 参数_链接索引;
	if (sendMsg(LM_GETITEM, 0, (LPARAM)&li) != 0) {
		return li.szID;
	}
	return L"";
}
bool BlackMoonUI::zyLinkBox::置链接状态(int 参数_链接索引, int 参数_状态) {
	LITEM li = { 0 };
	li.mask = LIF_STATE;
	li.iLink = 参数_链接索引;
	li.stateMask = 参数_状态;
	li.state = 参数_状态;
	return sendMsg(LM_SETITEM, 0, reinterpret_cast<LPARAM>(&li)) != 0;
}
int BlackMoonUI::zyLinkBox::取链接状态(int 参数_链接索引) {
	LITEM li = { 0 };
	li.mask = LIF_STATE;
	li.iLink = 参数_链接索引;
	li.stateMask = LIS_ENABLED | LIS_FOCUSED | LIS_VISITED;
	sendMsg(LM_SETITEM, 0, reinterpret_cast<LPARAM>(&li));
	return li.state;
}
int BlackMoonUI::zyLinkBox::取坐标链接(int 参数_横向坐标, int 参数_纵向坐标) {
	LHITTESTINFO lht = { 0 };
	lht.pt.x = 参数_横向坐标;
	lht.pt.y = 参数_纵向坐标;
	sendMsg(LM_HITTEST, 0, reinterpret_cast<LPARAM>(&lht));
	return lht.item.iLink;
}
void BlackMoonUI::zyLinkBox::事件_被单击(TRegEvent* 参数_事件指针)
{
	SetRegEvent(L"OnClick", 参数_事件指针);
}